home *** CD-ROM | disk | FTP | other *** search
/ PC Advisor 2011 May / PC Advisor 190 E.iso / pc / ESSENTIALS / VLC Media Player 1.1 / vlc-1.1.5-win32.exe / sdk / include / vlc / plugins / vlc_mtime.h < prev    next >
Encoding:
C/C++ Source or Header  |  2010-11-13  |  5.6 KB  |  140 lines

  1. /*****************************************************************************
  2.  * vlc_mtime.h: high resolution time management functions
  3.  *****************************************************************************
  4.  * This header provides portable high precision time management functions,
  5.  * which should be the only ones used in other segments of the program, since
  6.  * functions like gettimeofday() and ftime() are not always supported.
  7.  * Most functions are declared as inline or as macros since they are only
  8.  * interfaces to system calls and have to be called frequently.
  9.  * 'm' stands for 'micro', since maximum resolution is the microsecond.
  10.  * Functions prototyped are implemented in interface/mtime.c.
  11.  *****************************************************************************
  12.  * Copyright (C) 1996, 1997, 1998, 1999, 2000 the VideoLAN team
  13.  * $Id: 8d51250dab38177845a3c4ff2fab79e30128506c $
  14.  *
  15.  * Authors: Vincent Seguin <seguin@via.ecp.fr>
  16.  *
  17.  * This program is free software; you can redistribute it and/or modify
  18.  * it under the terms of the GNU General Public License as published by
  19.  * the Free Software Foundation; either version 2 of the License, or
  20.  * (at your option) any later version.
  21.  *
  22.  * This program is distributed in the hope that it will be useful,
  23.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  24.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  25.  * GNU General Public License for more details.
  26.  *
  27.  * You should have received a copy of the GNU General Public License
  28.  * along with this program; if not, write to the Free Software
  29.  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
  30.  *****************************************************************************/
  31.  
  32. #ifndef __VLC_MTIME_H
  33. # define __VLC_MTIME_H 1
  34.  
  35. /*****************************************************************************
  36.  * LAST_MDATE: date which will never happen
  37.  *****************************************************************************
  38.  * This date can be used as a 'never' date, to mark missing events in a function
  39.  * supposed to return a date, such as nothing to display in a function
  40.  * returning the date of the first image to be displayed. It can be used in
  41.  * comparaison with other values: all existing dates will be earlier.
  42.  *****************************************************************************/
  43. #define LAST_MDATE ((mtime_t)((uint64_t)(-1)/2))
  44.  
  45. /*****************************************************************************
  46.  * MSTRTIME_MAX_SIZE: maximum possible size of mstrtime
  47.  *****************************************************************************
  48.  * This values is the maximal possible size of the string returned by the
  49.  * mstrtime() function, including '-' and the final '\0'. It should be used to
  50.  * allocate the buffer.
  51.  *****************************************************************************/
  52. #define MSTRTIME_MAX_SIZE 22
  53.  
  54. /*****************************************************************************
  55.  * Prototypes
  56.  *****************************************************************************/
  57. VLC_EXPORT( char *,  mstrtime, ( char *psz_buffer, mtime_t date ) );
  58. VLC_EXPORT( mtime_t, mdate,    ( void ) );
  59. VLC_EXPORT( void,    mwait,    ( mtime_t date ) );
  60. VLC_EXPORT( void,    msleep,   ( mtime_t delay ) );
  61. VLC_EXPORT( char *,  secstotimestr, ( char *psz_buffer, int32_t secs ) );
  62.  
  63. # define VLC_HARD_MIN_SLEEP 10000   /* 10 milliseconds = 1 tick at 100Hz */
  64.  
  65. #if defined (__GNUC__) \
  66.  && ((__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3))
  67. /* Linux has 100, 250, 300 or 1000Hz
  68.  *
  69.  * HZ=100 by default on FreeBSD, but some architectures use a 1000Hz timer
  70.  */
  71. # define VLC_SOFT_MIN_SLEEP 9000000 /* 9 seconds */
  72.  
  73. static
  74. __attribute__((unused))
  75. __attribute__((noinline))
  76. __attribute__((error("sorry, cannot sleep for such short a time")))
  77. mtime_t impossible_delay( mtime_t delay )
  78. {
  79.     (void) delay;
  80.     return VLC_HARD_MIN_SLEEP;
  81. }
  82.  
  83. static
  84. __attribute__((unused))
  85. __attribute__((noinline))
  86. __attribute__((warning("use proper event handling instead of short delay")))
  87. mtime_t harmful_delay( mtime_t delay )
  88. {
  89.     return delay;
  90. }
  91.  
  92. # define check_delay( d ) \
  93.     ((__builtin_constant_p(d < VLC_HARD_MIN_SLEEP) \
  94.    && (d < VLC_HARD_MIN_SLEEP)) \
  95.        ? impossible_delay(d) \
  96.        : ((__builtin_constant_p(d < VLC_SOFT_MIN_SLEEP) \
  97.        && (d < VLC_SOFT_MIN_SLEEP)) \
  98.            ? harmful_delay(d) \
  99.            : d))
  100.  
  101. static
  102. __attribute__((unused))
  103. __attribute__((noinline))
  104. __attribute__((error("deadlines can not be constant")))
  105. mtime_t impossible_deadline( mtime_t deadline )
  106. {
  107.     return deadline;
  108. }
  109.  
  110. # define check_deadline( d ) \
  111.     (__builtin_constant_p(d) ? impossible_deadline(d) : d)
  112. #else
  113. # define check_delay(d) (d)
  114. # define check_deadline(d) (d)
  115. #endif
  116.  
  117. #define msleep(d) msleep(check_delay(d))
  118. #define mwait(d) mwait(check_deadline(d))
  119.  
  120. /*****************************************************************************
  121.  * date_t: date incrementation without long-term rounding errors
  122.  *****************************************************************************/
  123. struct date_t
  124. {
  125.     mtime_t  date;
  126.     uint32_t i_divider_num;
  127.     uint32_t i_divider_den;
  128.     uint32_t i_remainder;
  129. };
  130.  
  131. VLC_EXPORT( void,    date_Init,      ( date_t *, uint32_t, uint32_t ) );
  132. VLC_EXPORT( void,    date_Change,    ( date_t *, uint32_t, uint32_t ) );
  133. VLC_EXPORT( void,    date_Set,       ( date_t *, mtime_t ) );
  134. VLC_EXPORT( mtime_t, date_Get,       ( const date_t * ) );
  135. VLC_EXPORT( void,    date_Move,      ( date_t *, mtime_t ) );
  136. VLC_EXPORT( mtime_t, date_Increment, ( date_t *, uint32_t ) );
  137. VLC_EXPORT( mtime_t, date_Decrement, ( date_t *, uint32_t ) );
  138. VLC_EXPORT( uint64_t, NTPtime64,     ( void ) );
  139. #endif /* !__VLC_MTIME_ */
  140.